package com.junxian.springboot03.juc.threadPool;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadExample {
    public static void main(String[] args) {

        //异步处理
        example();

        //处里一堆无序的消息
        example1();
    }

    /**
     *
     * 异步处理：比如你提交订单后，系统会更新订单状态、发放京豆等等操作。其中发放京豆是可以异步处理的，
     * 不立即需要的事情异步处理的话，可以是当前的请求立即响应给用户，体验好很多。
     *
     * 要理解创建线程池的各个参数含义、理解runnable、Callable、Future
     */
    public static void example(){
//        PartyMicInformService.ServiceHolder.executors = new ThreadPoolExecutor(
//                apolloHelper.getIntConfig("party.mic.inform.thread", 5),
//                apolloHelper.getIntConfig("party.mic.inform.thread", 5),
//                5L,
//                TimeUnit.SECONDS,
//                new LinkedBlockingQueue<Runnable>(10000),//使用有界的阻塞队列,因为用无界队列的话，堆积了大量的请求，有时候会导致OOM
//                new ThreadFactoryBuilder().setNameFormat("PartyMicInformService-%d").build()
//                //拒绝策略：任务要快速处理并且可丢弃则使用丢弃策略，否则使用 CallerRunsPolicy 。
//        );
//        PartyMicInformHandleThread thread = new PartyMicInformHandleThread(this, kugouId, roomId, ymd);
//        //异步进行消息推送
//        ServiceHolder.executors.submit(thread);
    }

    /**
     * 处理一堆没有顺序的消息，存储在mq中云盘的日志消息采用多线程处理
     * 好处：处理一堆没有顺序的消息，然后用自定义的线程池的话加快处理速度
     */
    public static void example1(){
        //下面是另一个例子：
//        ThreadPoolExecutor threadPool = ThreadPoolMapUtil.initThreadPool(
//                ThreadPoolConstant.THREAD_POOL_BATCH_TRANSFER,
//                transferAcctCoreThread,
//                transferAcctMaxThread,
//                transferAcctQueues,
//                context.getPcpBatch().getBizCode());
//
//        for(int i = 1; i <= poolParams.getMaxConcurUse(); i++){
//            threadPool.execute(new BatchThread(i, new BatchThreadTask() {
//                @Override
//                public void doTask(int i) {
//                    executeTransaction(context);
//                }
//            }));
//        }
    }

}
